home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / BASIC / GFXSYS.BAS < prev    next >
BASIC Source File  |  2000-09-26  |  9KB  |  431 lines

  1. $INCLUDE "REGNAMES.INC"
  2. $STACK 32000
  3. call InitScreen(20)
  4.  
  5. dummy=MenuGadget(6,"Projekt",100)
  6. dummy=MenuGadget(20,"Einstellungen",200)
  7. dummy=MenuGadget(40,"Testmen",300)
  8. dummy=MenuGadget(60,"Gadget entfernen",400)
  9.  
  10. q=0
  11. for y=4 to 12 step 2
  12.  dummy=BoolGadget(10,y,30,1,"Boolean-Gadget",q)
  13.  q=q+1
  14. next
  15.  
  16. q=20
  17. for y=14 to 24 step 2
  18.  dummy=ToggleGadget(10,y,30,1,"Toggle-Gadget",y mod 3,q)
  19.  q=q+1
  20. next
  21.  
  22. dim Feld1$(20)
  23. dim Feld2$(30)
  24. dim Feld3$(30)
  25.  
  26. Feld1$(0)="Datei laden"
  27. Feld1$(1)="Datei speichern"
  28. Feld1$(2)="Datei speichern als"
  29. Feld1$(3)="-"
  30. Feld1$(4)="Datei l”schen"
  31. Feld1$(5)="Datei kopieren"
  32. Feld1$(6)="Datei verschieben"
  33. Feld1$(7)="Datei umbenennen"
  34. Feld1$(8)="-"
  35. Feld1$(9)="Information"
  36. Feld1$(10)="-"
  37. Feld1$(11)="Ende"
  38.  
  39. for i=0 to 30
  40.  Feld2$(i)="  Menpunkt Nummer"+str$(i+1)
  41.  Feld3$(i)=chr$(251)+" Menu-Item "+str$(i+1)
  42. next
  43.  
  44. call MouseOn
  45.  
  46. while inkey$=""
  47.  call MouseDown
  48.  if mouse.button<>0 then call MouseHandler
  49.  
  50.  if gad.id<>-1 then
  51.   if gad.number(gad.id)=100 then
  52.    call MenuHandler(6,200,Feld1$(),12)
  53.   end if
  54.   if gad.number(gad.id)=200 then
  55.    call MenuHandler(20,200,Feld2$(),16)
  56.   end if
  57.   if gad.number(gad.id)=300 then
  58.    call MenuHandler(40,150,Feld3$(),25)
  59.   end if
  60.  
  61.   if gad.number(gad.id)=400 then
  62.    if gad.count>3 then
  63.     call RemoveGadget(gad.count-1)
  64.    end if
  65.   end if
  66.  
  67.   color 15
  68.   locate 5,1:?"G:";gad.number(gad.id)
  69.   locate 6,1:?"$:";gad.id
  70.   locate 7,1:?"M:";menu.id
  71.  end if
  72.  
  73.  gad.id=-1
  74.  menu.id=-1
  75. wend
  76.  
  77. call MouseOff
  78. end
  79.  
  80. sub DrawPBorder(xo,yo,wo,ho,t$) static
  81.  x=xo*8-2  : w=wo*8
  82.  y=yo*16-4 : h=ho*16+4
  83.  line (x,y+h)-(x,y),15
  84.  line -(x+w,y),15
  85.  line (x+w,y+1)-(x+w,y+h),7
  86.  line -(x+1,y+h),7
  87.  locate yo+1,xo+3
  88.  color 15
  89.  print t$
  90. end sub
  91.  
  92. sub DrawNBorder(xo,yo,wo,ho,t$) static
  93.  x=xo*8-2  : w=wo*8
  94.  y=yo*16-4 : h=ho*16+4
  95.  line (x,y+h)-(x,y),7
  96.  line -(x+w,y),7
  97.  line (x+w,y+1)-(x+w,y+h),15
  98.  line -(x+1,y+h),15
  99.  locate yo+1,xo+3
  100.  color 15
  101.  print t$
  102. end sub
  103.  
  104. sub MouseOn static
  105.  reg %ax,&H0001
  106.  call interrupt &H33
  107. end sub
  108.  
  109. sub MouseOff static
  110.  reg %ax,&H0002
  111.  call interrupt &H33
  112. end sub
  113.  
  114. sub MouseDown shared
  115.  reg %ax,&H0005
  116.  reg %bx,0
  117.  call interrupt &H33
  118.  mouse.x=reg(%cx)
  119.  mouse.y=reg(%dx)
  120.  mouse.button=reg(%BX)
  121.  reg %ax,&H0006
  122.  reg %bx,0
  123.  call interrupt &H33
  124. end sub
  125.  
  126. sub MouseUp shared
  127.  reg %ax,&H0006
  128.  reg %bx,0
  129.  call interrupt &H33
  130.  mouse.x=reg(%cx)
  131.  mouse.y=reg(%dx)
  132.  mouse.button=reg(%BX)
  133. end sub
  134.  
  135. sub MouseXY shared
  136.  reg %ax,&H0003
  137.  reg %bx,0
  138.  call interrupt &H33
  139.  mouse.x=reg(%cx)
  140.  mouse.y=reg(%dx)
  141. end sub
  142.  
  143. sub InitScreen(anz) shared
  144.  screen 12
  145.  reg %ax,&H10*256+&H10
  146.  reg %bx,0
  147.  reg %cx,&Haaaa
  148.  reg %dx,&Haa00
  149.  call interrupt &H10
  150.  reg %ax,&H10*256+&H10
  151.  reg %bx,7
  152.  reg %cx,0
  153.  reg %dx,0
  154.  call interrupt &H10
  155.  dim gad.x1(anz)
  156.  dim gad.x2(anz)
  157.  dim gad.y1(anz)
  158.  dim gad.y2(anz)
  159.  dim gad.x(anz)
  160.  dim gad.y(anz)
  161.  dim gad.w(anz)
  162.  dim gad.h(anz)
  163.  dim gad.text$(anz)
  164.  dim gad.flags(anz)
  165.  dim gad.selected(anz)
  166.  dim gad.number(anz)
  167.  gad.count=0
  168.  gad.max=anz
  169.  gad.id=-1
  170.  menu.id=-1
  171.  %GADGHNONE=1
  172.  %GADGHCOMP=2
  173.  %TOGGLESELECT=3
  174.  %MENUGAD=4
  175.  call DrawPBorder(5,1,74,1,"")
  176.  dummy=BoolGadget(1,1,3,1,"",33333)
  177. end sub
  178.  
  179. sub MouseHandler shared
  180.  gad.id=-1
  181.  if gad.count>0 then
  182.   for i=0 to gad.count-1
  183.    if mouse.x>=gad.x1(i) and mouse.x<=gad.x2(i) then
  184.     if mouse.y>=gad.y1(i) and mouse.y<=gad.y2(i) then
  185.      gad.id=i
  186.      call GadgetHandler
  187.      exit sub
  188.     end if
  189.    end if
  190.   next
  191.  end if
  192. end sub
  193.  
  194. sub GadgetHandler shared
  195.  if gad.id=-1 then exit sub
  196.  if gad.flags(gad.id)=%GADGHCOMP then
  197.   call MouseOff
  198.   call DrawNBorder(gad.x(gad.id),gad.y(gad.id),gad.w(gad.id),gad.h(id),"")
  199.   call MouseOn
  200.   call MouseUp
  201.   while mouse.button=0
  202.    call MouseUp
  203.   wend
  204.   call MouseOff
  205.   call DrawPBorder(gad.x(gad.id),gad.y(gad.id),gad.w(gad.id),gad.h(id),"")
  206.   call MouseOn
  207.   i=gad.id
  208.   gad.id=-1
  209.   if mouse.x>=gad.x1(i) and mouse.x<=gad.x2(i) then
  210.     if mouse.y>=gad.y1(i) and mouse.y<=gad.y2(i) then
  211.      gad.id=i
  212.     end if
  213.   end if
  214.  elseif gad.flags(gad.id)=%MENUGAD then
  215.   call MouseUp
  216.  elseif gad.flags(gad.id)=%TOGGLESELECT then
  217.   call MouseUp
  218.   call MouseOff
  219.   if gad.selected(gad.id)=0 then
  220.    call DrawPBorder(gad.x(gad.id),gad.y(gad.id),gad.w(gad.id),gad.h(gad.id),"")
  221.    gad.selected(gad.id)=1
  222.   else
  223.    call DrawNBorder(gad.x(gad.id),gad.y(gad.id),gad.w(gad.id),gad.h(gad.id),"")
  224.    gad.selected(gad.id)=0
  225.   end if
  226.   call MouseOn
  227.  end if
  228. end sub
  229.  
  230. function BoolGadget(x,y,w,h,text$,id) shared
  231.  if gad.count>=gad.max then exit function
  232.  gad.x(gad.count)=x
  233.  gad.y(gad.count)=y
  234.  gad.w(gad.count)=w
  235.  gad.h(gad.count)=h
  236.  gad.x1(gad.count)=x*8-2
  237.  gad.y1(gad.count)=y*16-6
  238.  gad.x2(gad.count)=gad.x1(gad.count)+(w*8)
  239.  gad.y2(gad.count)=gad.y1(gad.count)+(h*16)+4
  240.  gad.text$(gad.count)=text$
  241.  gad.flags(gad.count)=%GADGHCOMP
  242.  gad.selected(gad.count)=0
  243.  gad.number(gad.count)=id
  244.  BoolGadget=gad.count
  245.  gad.count=gad.count+1
  246.  call DrawPBorder(x,y,w,h,text$)
  247. end function
  248.  
  249. function ToggleGadget(x,y,w,h,text$,selected,id) shared
  250.  if gad.count>=gad.max then exit function
  251.  gad.x(gad.count)=x
  252.  gad.y(gad.count)=y
  253.  gad.w(gad.count)=w
  254.  gad.h(gad.count)=h
  255.  gad.x1(gad.count)=x*8-2
  256.  gad.y1(gad.count)=y*16-6
  257.  gad.x2(gad.count)=gad.x1(gad.count)+(w*8)
  258.  gad.y2(gad.count)=gad.y1(gad.count)+(h*16)+4
  259.  gad.text$(gad.count)=text$
  260.  gad.flags(gad.count)=%TOGGLESELECT
  261.  gad.selected(gad.count)=selected
  262.  gad.number(gad.count)=id
  263.  ToggleGadget=gad.count
  264.  gad.count=gad.count+1
  265.  if selected=0 then
  266.   call DrawNBorder(x,y,w,h,text$)
  267.  else
  268.   call DrawPBorder(x,y,w,h,text$)
  269.  end if
  270. end function
  271.  
  272. sub RemoveGadget(num) shared
  273.  call MouseOff
  274.  if gad.flags(num)<>%MENUGAD then
  275.   line (gad.x1(num),gad.y1(num))-(gad.x2(num)+1,gad.y2(num)+2),0,bf
  276.  else
  277.   locate gad.y(num)+1,gad.x(num)+1
  278.   color 0
  279.   print gad.text$(num)
  280.  end if
  281.  call MouseOn
  282.  if gad.count<gad.max then
  283.   for i=num to gad.max-1
  284.    gad.x1(i)=gad.x1(i+1)
  285.    gad.x2(i)=gad.x2(i+1)
  286.    gad.y1(i)=gad.y1(i+1)
  287.    gad.y2(i)=gad.y2(i+1)
  288.    gad.x(i)=gad.x(i+1)
  289.    gad.y(i)=gad.y(i+1)
  290.    gad.w(i)=gad.w(i+1)
  291.    gad.h(i)=gad.h(i+1)
  292.    gad.text$(i)=gad.text$(i+1)
  293.    gad.flags(i)=gad.flags(i+1)
  294.    gad.selected(i)=gad.selected(i+1)
  295.    gad.number(i)=gad.number(i+1)
  296.   next
  297.  end if
  298.  gad.count=gad.count-1
  299. end sub
  300.  
  301. function MenuGadget(x,text$,id) shared
  302.  if gad.count>=gad.max then exit function
  303.  y=1
  304.  h=1
  305.  w=len(text$)
  306.  gad.x(gad.count)=x
  307.  gad.y(gad.count)=y
  308.  gad.w(gad.count)=w
  309.  gad.h(gad.count)=h
  310.  gad.x1(gad.count)=x*8-2
  311.  gad.y1(gad.count)=y*16-6
  312.  gad.x2(gad.count)=gad.x1(gad.count)+(w*8)
  313.  gad.y2(gad.count)=gad.y1(gad.count)+(h*16)+4
  314.  gad.text$(gad.count)=text$
  315.  gad.flags(gad.count)=%MENUGAD
  316.  gad.selected(gad.count)=0
  317.  gad.number(gad.count)=id
  318.  MenuGadget=gad.count
  319.  gad.count=gad.count+1
  320.  locate y+1,x+1
  321.  print text$
  322. end function
  323.  
  324. sub MenuHandler(x,w,feld$(),anz) shared
  325.  ax1=x*8
  326.  ay1=30
  327.  ax2=ax1+w
  328.  ay2=ay1+(anz*16)+8
  329.  size&=(ax2-ax1)*(ay2-ay1)/2
  330.  dim backup%(size&)
  331.  call MouseOff
  332.  get (ax1,ay1)-(ax2,ay2),backup%
  333.  line (ax1,ay1)-(ax2,ay2),0,bf
  334.  line (ax1,ay2)-(ax1,ay1),15
  335.  line -(ax2,ay1),15
  336.  line (ax1+1,ay2)-(ax2,ay2),7
  337.  line -(ax2,ay1+1),7
  338.  color 15
  339.  for i=0 to anz-1
  340.   if feld$(i)<>"-" then
  341.    locate 3+i,x+3
  342.    print feld$(i)
  343.   else
  344.    ty=(3+i)*16-8
  345.    line (ax1+1,ty)-(ax2-1,ty),15
  346.   end if
  347.  next
  348.  call MouseOn
  349.  
  350.  call MouseUp
  351.  while mouse.button=0
  352.   call MouseUp
  353.  wend
  354.  
  355.  of=-1
  356.  call MouseDown
  357.  while mouse.button=0
  358.   call MouseXY
  359.   if mouse.x>ax1 and mouse.x<ax2 then
  360.    y=int(mouse.y/16)+1
  361.    if y>=3 and y<3+anz then
  362.     if of<>y-3 then
  363.      if of<>-1 then
  364.       call MouseOff
  365.       color 15
  366.       locate oy,ox
  367.       print feld$(of)
  368.       call MouseOn
  369.      end if
  370.      if feld$(y-3)<>"-" then
  371.       oy=y
  372.       ox=x+3
  373.       of=y-3
  374.       call MouseOff
  375.       color 3
  376.       locate oy,ox
  377.       print feld$(of)
  378.       call MouseOn
  379.      else
  380.       of=-1
  381.      end if
  382.      call MouseOn
  383.     end if
  384.    else
  385.     if of<>-1 then
  386.      call MouseOff
  387.      color 15
  388.      locate oy,ox
  389.      print feld$(of)
  390.      call MouseOn
  391.      of=-1
  392.     end if
  393.    end if
  394.   end if
  395.   call MouseDown
  396.  wend
  397.  y=int(mouse.y/16)+1
  398.  menu.id=-1
  399.  if y>=3 and y<3+anz and mouse.x>ax1 and mouse.x<ax2 then
  400.   if feld$(y-3)<>"-" then
  401.    menu.id=y-3
  402.    if mid$(feld$(menu.id),1,1)=" " then
  403.     mid$(feld$(menu.id),1,1)=chr$(251)
  404.    elseif mid$(feld$(menu.id),1,1)=chr$(251) then
  405.     mid$(feld$(menu.id),1,1)=" "
  406.    end if
  407.   end if
  408.  end if
  409.  
  410.  call MouseOff
  411.  put (ax1,ay1),backup%,pset
  412.  erase backup%
  413.  call MouseOn
  414. end sub
  415.  
  416. function ToggleMenuStatus(titel$) static
  417.  if mid$(titel$,1,1)=" " then
  418.   ToggleMenuStatus=0
  419.  elseif mid$(titel$,1,1)=chr$(251) then
  420.   ToggleMenuStatus=1
  421.  else
  422.   ToggleMenuStatus=-1
  423.  end if
  424. end function
  425.  
  426. sub SetToggleMenu(titel$,onoff) static
  427.  if onoff=1 then c$=chr$(251) else c$=" "
  428.  mid$(titel$,1,1)=c$
  429. end sub
  430.  
  431.